package com.sxj.corejava.code07_stream;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

/**
 * @author 石小俊
 * @date 2023年12月2023/12/23日 13:29
 */
public class Test02_中间操作 {

    private static List<Integer> list = Arrays.asList(1, 4, 5, 7, 8, 3, 6, 13, 19, 15, 12, 6, 2, 4);

    public static void main(String[] args) {
//        filterTest();
//        distinctTest();
//        limitTest();
//        skipTest();
//        findPage(3,4);
//        mapTest();
//        sortedTest();
        sortedComparatorTest();
    }

    public static void filterTest() {
        // 过滤操作,用于过滤集合中元素是否符合指定规则
        // 只保留符合规则的元素
        // 其参数是一个断言型接口
        list.stream()
                .filter(i -> i % 2 == 0)
                .forEach(System.out::println);
    }

    public static void distinctTest() {
        // 去除重复的元素
        list.stream()
                .filter(i -> i % 2 == 0)
                .distinct()
                .forEach(System.out::println);
    }

    public static void limitTest() {
//        list.stream()
//                .limit(5)
//                .forEach(System.out::println);

        Stream.iterate(1, i -> i + 1)
                .limit(20)
                .forEach(System.out::println);
    }

    public static void skipTest() {
//        list.stream()
//                .skip(5)
//                .forEach(System.out::println);
        Stream.iterate(1, i -> i + 1)
                .skip(20)
                .limit(10)
                .forEach(System.out::println);
    }

    public static void findPage(Integer pageNo, Integer pageSize) {
        // 模拟分页,其规律与MySQL中limit语句一致
        list.stream()
                .skip((pageNo - 1) * pageSize)
                .limit(pageSize)
                .forEach(System.out::println);
    }

    public static void mapTest() {
        list.stream()
                .map(i -> i * 2)
                .forEach(System.out::println);
    }

    public static void sortedTest() {
        list.stream()
                .distinct()
                .sorted()
                .forEach(System.out::println);

        List<String> names = Arrays.asList("alice", "tom", "jack", "admin", "lily", "root");
        names.stream()
                .distinct()
                .sorted()
                .forEach(System.out::println);
    }

    public static void sortedComparatorTest() {
        list.stream()
                .distinct()
                .sorted((o1, o2) -> o2 - o1)
                .forEach(System.out::println);

        List<String> names = Arrays.asList("alice", "tom", "jack", "admin", "lily", "root");
        names.stream()
                .distinct()
                .sorted((o1, o2) -> o1.length() - o2.length())
                .forEach(System.out::println);
    }

}
